/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package vistas;

import controladores.RepuestoJpaController;
import entidades.CambioDeRepuestos;
import entidades.CategoriaRepuesto;
import entidades.MarcaRepuesto;
import entidades.ModeloRepuesto;
import entidades.ProveedorRepuesto;
import entidades.Repuesto;
import java.awt.Color;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import javax.swing.text.PlainDocument;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import org.apache.commons.collections.functors.ForClosure;
import reportes.GenReportes;

import rn.RepuestoRN;
import rn.VehiculoRN;

/**
 *
 * @author Pablo
 */
public class SeleccionarRepuesto extends javax.swing.JFrame {

    private Repuesto repuesto, repuesto_seleccionado;
    DefaultTableModel modelo_de_tabla;
    private int opcion_modificar = 0;
    FormCambioDeRepuestos cambioDeRepuestos;

    public SeleccionarRepuesto(FormCambioDeRepuestos form) {
        initComponents();

        this.cambioDeRepuestos = form;

        repuesto = new Repuesto();

        tf_descripcion.setDocument(new JTextFieldToUpperCase());
        tf_nro_parte.setDocument(new JTextFieldToUpperCase());

        tf_descripcion.getDocument().putProperty("campoDelEvento", "descripcion");
        tf_descripcion.getDocument().addDocumentListener(new TexChangeListener());
        tf_descripcion.addKeyListener(new KeyPressedClass());
        tf_nro_parte.getDocument().putProperty("campoDelEvento", "nro_parte");
        tf_nro_parte.getDocument().addDocumentListener(new TexChangeListener());
        tf_nro_parte.addKeyListener(new KeyPressedClass());

        tabla_conincidencias.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "Enter");
        tabla_conincidencias.getActionMap().put("Enter", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent ae) {
                System.out.println("Se presiono la tecla enter");
                int fila = tabla_conincidencias.getSelectedRow();
                String s_id = (String) tabla_conincidencias.getValueAt(fila, 0);
                repuesto_seleccionado = RepuestoRN.findRepuestoPorID(new Long(s_id));
                llenarCampos(repuesto_seleccionado);
                habilitarCampos(false);
                tabla_conincidencias.requestFocus();
                tabla_conincidencias.changeSelection(fila, 0, false, false);
                bt_selecionar_repuesto.requestFocus();
            }
        });

        //Para accionar con doble clic
        tabla_conincidencias.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent me) {
                JTable table = (JTable) me.getSource();
                Point p = me.getPoint();
                int row = table.rowAtPoint(p);
                if (me.getClickCount() == 2) {
                    String s_id = (String) tabla_conincidencias.getValueAt(row, 0);
                    repuesto_seleccionado = RepuestoRN.findRepuestoPorID(new Long(s_id));
                    llenarCampos(repuesto_seleccionado);
                    habilitarCampos(false);
                    tabla_conincidencias.requestFocus();
                    tabla_conincidencias.changeSelection(row, 0, false, false);
                    bt_selecionar_repuesto.requestFocus();
                }
            }
        });

        bt_selecionar_repuesto.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                if ( (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_S) && e.getSource() == bt_selecionar_repuesto) {
                    seleccionarRepuesto();
                }
                if (e.getKeyCode() == KeyEvent.VK_N && e.getSource() == bt_selecionar_repuesto) {
                    habilitarCampos(true);
                    tf_nro_parte.requestFocus();
                }
            }

        });

        llenarCombos();
        //this.bt_selecionar_repuesto.addKeyListener(new ActionSeleccionarRepuesto());
        //this.bt_selecionar_repuesto.addKeyListener(new MakeEnterDoAction());
        this.tf_nro_parte.requestFocus();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }

    @SuppressWarnings("unchecked")

    public boolean verificarDatosRepuesto(Repuesto v, Long id_excepcion) {
        boolean b = true;
        if (RepuestoRN.yaExiste(v.getDescripcion(), RepuestoJpaController.DESCRIPCION, id_excepcion)) {
            b = false;
            mostrarMensaje("Ya existe un repuesto con la misma 'descripción'");
        }
        if (RepuestoRN.yaExiste(v.getNro_parte(), RepuestoJpaController.NRO_PARTE, id_excepcion)) {
            b = false;
            mostrarMensaje("Ya existe un repuesto con la misma 'nro_parte'");
        }
        return b;
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel3 = new javax.swing.JLabel();
        tf_combustible_actual1 = new javax.swing.JTextField();
        bt_ingresar1 = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        tf_combustible_actual4 = new javax.swing.JTextField();
        bt_cancelar = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        tf_nro_parte = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        jLabel13 = new javax.swing.JLabel();
        tf_descripcion = new javax.swing.JTextField();
        jLabel10 = new javax.swing.JLabel();
        tf_codigo_barras = new javax.swing.JTextField();
        bt_selecionar_repuesto = new javax.swing.JButton();
        jScrollPane4 = new javax.swing.JScrollPane();
        tabla_conincidencias = new javax.swing.JTable();
        jPanel4 = new javax.swing.JPanel();
        combo_listados = new javax.swing.JComboBox();
        tx_categoria = new javax.swing.JLabel();
        combo_categoria_filtro = new javax.swing.JComboBox();
        tx_marca = new javax.swing.JLabel();
        combo_marca_filtro = new javax.swing.JComboBox();

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel3.setText("Combustible Actual (M3):");

        tf_combustible_actual1.setEnabled(false);

        bt_ingresar1.setText("INGRESAR");

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel5.setText("Ingreso (M3):");

        jLabel9.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel9.setText("Ingreso (M3):");

        tf_combustible_actual4.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("SELECIONAR REPUESTO");

        bt_cancelar.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        bt_cancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/cancel.png"))); // NOI18N
        bt_cancelar.setText("CANCELAR");
        bt_cancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_cancelarActionPerformed(evt);
            }
        });

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Selecionar Repuesto"));

        tf_nro_parte.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        jLabel8.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel8.setText("Nro parte:");

        jLabel13.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel13.setText("Descripción:");

        tf_descripcion.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        jLabel10.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel10.setText("Codigo de barras:");

        tf_codigo_barras.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N

        bt_selecionar_repuesto.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        bt_selecionar_repuesto.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/arrow_left.png"))); // NOI18N
        bt_selecionar_repuesto.setText("SELECIONAR - SI: (S) - NO: (N)");
        bt_selecionar_repuesto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bt_selecionar_repuestoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel2Layout.createSequentialGroup()
                        .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel13, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel10, javax.swing.GroupLayout.Alignment.TRAILING))
                        .addGap(10, 10, 10))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                        .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(tf_codigo_barras)
                    .addComponent(tf_descripcion)
                    .addComponent(tf_nro_parte, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(bt_selecionar_repuesto, javax.swing.GroupLayout.DEFAULT_SIZE, 248, Short.MAX_VALUE)))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tf_nro_parte, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel8))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tf_codigo_barras, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel10))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(tf_descripcion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel13))
                .addGap(18, 18, 18)
                .addComponent(bt_selecionar_repuesto)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        tabla_conincidencias.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Documento", "Nombre"
            }
        ));
        jScrollPane4.setViewportView(tabla_conincidencias);

        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Listar"));

        combo_listados.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        combo_listados.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccionar...", "Todos", "Marca:", "Categoria:" }));
        combo_listados.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                combo_listadosActionPerformed(evt);
            }
        });

        tx_categoria.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        tx_categoria.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        tx_categoria.setText("Categ.:");
        tx_categoria.setEnabled(false);

        combo_categoria_filtro.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        combo_categoria_filtro.setEnabled(false);
        combo_categoria_filtro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                combo_categoria_filtroActionPerformed(evt);
            }
        });

        tx_marca.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        tx_marca.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        tx_marca.setText("Marca:");
        tx_marca.setEnabled(false);

        combo_marca_filtro.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        combo_marca_filtro.setEnabled(false);
        combo_marca_filtro.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                combo_marca_filtroActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
        jPanel4.setLayout(jPanel4Layout);
        jPanel4Layout.setHorizontalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addComponent(combo_listados, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(38, 38, 38)
                .addComponent(tx_marca)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(combo_marca_filtro, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addComponent(tx_categoria)
                .addGap(7, 7, 7)
                .addComponent(combo_categoria_filtro, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanel4Layout.setVerticalGroup(
            jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel4Layout.createSequentialGroup()
                .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(combo_listados, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(combo_categoria_filtro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(tx_categoria))
                    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(combo_marca_filtro, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(tx_marca)))
                .addGap(0, 40, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 657, Short.MAX_VALUE)
                            .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(719, 955, Short.MAX_VALUE)
                        .addComponent(bt_cancelar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 168, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(bt_cancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void combo_categoria_filtroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_combo_categoria_filtroActionPerformed
        List<Repuesto> resultado = new ArrayList();
        CategoriaRepuesto item_selected = (CategoriaRepuesto) combo_categoria_filtro.getSelectedItem();
        resultado = RepuestoRN.getRepuestosPor(item_selected.toString(), "Categoria");
        llenarTablaResultado(resultado);
    }//GEN-LAST:event_combo_categoria_filtroActionPerformed

    private void combo_listadosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_combo_listadosActionPerformed
        List<Repuesto> resultado = new ArrayList();
        String item_selected = (String) combo_listados.getSelectedItem();
        if (!item_selected.equals("Seleccionar...")) {
            switch (item_selected) {
                case "Todos":
                    habilitarFiltro(false);
                    resultado = RepuestoRN.getTodosVechiculos();
                    break;
                case "Marca:":
                    habilitarFiltro(false);
                    tx_marca.setEnabled(true);
                    combo_marca_filtro.setEnabled(true);
                    break;
                case "Categoria:":
                    habilitarFiltro(false);
                    tx_categoria.setEnabled(true);
                    combo_categoria_filtro.setEnabled(true);
                    break;
            }
            llenarTablaResultado(resultado);
        }
    }//GEN-LAST:event_combo_listadosActionPerformed

    private void combo_marca_filtroActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_combo_marca_filtroActionPerformed
        List<Repuesto> resultado = new ArrayList();
        MarcaRepuesto item_selected = (MarcaRepuesto) combo_marca_filtro.getSelectedItem();
        resultado = RepuestoRN.getRepuestosPor(item_selected.toString(), "Marca");
        llenarTablaResultado(resultado);
    }//GEN-LAST:event_combo_marca_filtroActionPerformed

    private void bt_cancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_cancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_bt_cancelarActionPerformed

    private void bt_selecionar_repuestoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_selecionar_repuestoActionPerformed
        seleccionarRepuesto();
    }//GEN-LAST:event_bt_selecionar_repuestoActionPerformed

    public class MakeEnterDoAction extends KeyAdapter {

        public void keyPressed(KeyEvent ke) {
//            if (ke.getKeyCode() == KeyEvent.VK_ENTER || ke.getKeyCode() == KeyEvent.VK_S && ke.getSource() == bt_selecionar_repuesto) {
//                seleccionarRepuesto();
//                ke.consume();
//            }
            if (ke.getKeyCode() == KeyEvent.VK_N) {
                tf_nro_parte.requestFocus();
            }
        }

    }


    private void seleccionarRepuesto() {
        if (repuesto_seleccionado != null) {
            if (cambioDeRepuestos != null) {
                if (consultarStockRepuesto()) {
//                    if (repuesto_seleccionado.getCategoriaRepuesto().getDescripcion().equals("RODADOS")) {
//                        new DialogSeleccionarRueda(this, true, this);
//                        if (eje != 0 && rueda != 0) {
//                            cambioDeRepuestos.agregarRepuestoALista(repuesto_seleccionado, eje, rueda);
//                        }
//                    } else {
//                        cambioDeRepuestos.agregarRepuestoALista(repuesto_seleccionado, 0, 0);
//                    }
                    cambioDeRepuestos.agregarRepuestoALista(repuesto_seleccionado, 0, 0);
                    this.dispose();
                } else {
                    JOptionPane.showMessageDialog(null, "Stock agotado");
                }

            } else {
                FormIngresoRepuestos.llenarCampos(repuesto_seleccionado);
                FormIngresoRepuestos.bt_confirmar.setEnabled(true);
                FormIngresoRepuestos.bt_confirmar.requestFocus();
            }
            this.dispose();
        }
        else {
             JOptionPane.showMessageDialog(null, "Debe seleccionar un repuesto");
        }
    }

    int eje = 0, rueda = 0;

    public void setRuedaSelecionarda(int eje, int rueda) {
        this.eje = eje;
        this.rueda = rueda;
    }

    private void habilitarFiltro(boolean b) {
        tx_categoria.setEnabled(b);
        combo_categoria_filtro.setEnabled(b);
        tx_marca.setEnabled(b);
        combo_marca_filtro.setEnabled(b);
    }

    private void setearRepuesto() {
        //Fields
        repuesto.setDescripcion(tf_descripcion.getText());
        repuesto.setNro_parte(tf_nro_parte.getText());
        repuesto.setCodigo_barras(tf_codigo_barras.getText());
        repuesto.setStock(0);

    }

    private boolean consultarStockRepuesto() {
        int ya_agregados = 0;
        int en_stock = repuesto_seleccionado.getStock();
        List<CambioDeRepuestos> ls_cambios = cambioDeRepuestos.getLs_cambios();
        for (CambioDeRepuestos c : ls_cambios) {
            if (c.getRepuesto().equals(repuesto_seleccionado)) {
                ya_agregados++;
            }
        }
        if ((en_stock - ya_agregados) >= 1) {
            return true;
        }
        return false;
    }


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton bt_cancelar;
    private javax.swing.JButton bt_ingresar1;
    private javax.swing.JButton bt_selecionar_repuesto;
    private javax.swing.JComboBox combo_categoria_filtro;
    private javax.swing.JComboBox combo_listados;
    private javax.swing.JComboBox combo_marca_filtro;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JTable tabla_conincidencias;
    private javax.swing.JTextField tf_codigo_barras;
    private javax.swing.JTextField tf_combustible_actual1;
    private javax.swing.JTextField tf_combustible_actual4;
    private javax.swing.JTextField tf_descripcion;
    private javax.swing.JTextField tf_nro_parte;
    private javax.swing.JLabel tx_categoria;
    private javax.swing.JLabel tx_marca;
    // End of variables declaration//GEN-END:variables

    private boolean chaquearCamposRequeridos() {

        ArrayList<JTextField> campos_requeridos = new ArrayList();
        campos_requeridos.add(tf_descripcion);
        campos_requeridos.add(tf_nro_parte);

        for (JTextField t : campos_requeridos) {
            if (t.getText().startsWith(" ") || t.getText().isEmpty()) {
                return false;
            }
        }
        return true;
    }

    private void limpiarCampos() {
        tf_descripcion.setText(null);
        tf_nro_parte.setText(null);
        tf_codigo_barras.setText(null);
    }

    private void mostrarMensaje(String mensaje) {
        JOptionPane.showMessageDialog(null, mensaje);
    }

    public void llenarCombos() {
        List<CategoriaRepuesto> todosCategoria = RepuestoRN.getTodosCategoriaRepuesto();
        List<MarcaRepuesto> todosMarca = RepuestoRN.getTodosMarcaRepuesto();
        List<ModeloRepuesto> todosModelo = RepuestoRN.getTodosModeloRepuesto();
        List<ProveedorRepuesto> todosProveedorRepuestos = RepuestoRN.getTodosProveedorRepuesto();

        llenarCombo(combo_categoria_filtro, todosCategoria);
        llenarCombo(combo_marca_filtro, todosMarca);
    }

    public void llenarCombo(JComboBox combo, List lista) {
        for (Object c : lista) {
            combo.addItem(c);
        }
    }

    private void llenarTablaResultado(List<Repuesto> resultado) {
        iniciarModeloTabla();
        for (Repuesto c : resultado) {

            Object fila[] = new Object[]{
                c.getId().toString(), c.getDescripcion(), c.getNro_parte(), c.getStock()
            };
            modelo_de_tabla.addRow(fila);
        }
        tabla_conincidencias.setModel(modelo_de_tabla);
        iniciarModeloColumna();

    }

    public class TexChangeListener implements DocumentListener {

        public void insertUpdate(javax.swing.event.DocumentEvent evt) {
            LlenarTablaConicidencias(evt);
        }

        public void removeUpdate(javax.swing.event.DocumentEvent evt) {
            LlenarTablaConicidencias(evt);
        }

        public void changedUpdate(javax.swing.event.DocumentEvent evt) {
            LlenarTablaConicidencias(evt);
        }
    }

    private void iniciarModeloTabla() {
        Object datos[][] = {};
        String[] columnNames = {"Id", "Descripcion", "Nro Parte", "Stock"};
        modelo_de_tabla = new DefaultTableModel(datos, columnNames);
    }

    private void iniciarModeloColumna() {
        TableColumnModel columnModel = tabla_conincidencias.getColumnModel();
        columnModel.getColumn(0).setPreferredWidth(10);
        columnModel.getColumn(2).setPreferredWidth(20);
    }

    public void LlenarTablaConicidencias(javax.swing.event.DocumentEvent evt) {

        String campo_del_evento = (String) evt.getDocument().getProperty("campoDelEvento");
        List<Repuesto> listaPersonas = new ArrayList<>();

        if (campo_del_evento.equals("descripcion")) {
            listaPersonas = RepuestoRN.getRepuestosLike(tf_descripcion.getText(), RepuestoJpaController.DESCRIPCION);
        }
        if (campo_del_evento.equals("nro_parte")) {
            listaPersonas = RepuestoRN.getRepuestosLike(tf_nro_parte.getText(), RepuestoJpaController.NRO_PARTE);
        }

        iniciarModeloTabla();

        for (Repuesto c : listaPersonas) {

            Object fila[] = new Object[]{
                c.getId().toString(), c.getDescripcion(), c.getNro_parte(), c.getStock()
            };
            modelo_de_tabla.addRow(fila);
        }
        tabla_conincidencias.setModel(modelo_de_tabla);
        iniciarModeloColumna();
    }

    public class KeyPressedClass implements KeyListener {

        @Override
        public void keyTyped(KeyEvent e) {
            accion(e);
        }

        @Override
        public void keyPressed(KeyEvent e) {
            accion(e);
        }

        @Override
        public void keyReleased(KeyEvent e) {
            accion(e);
        }

        public void accion(KeyEvent e) {
            if (e.getSource() == tf_descripcion || e.getSource() == tf_nro_parte) {
                if (e.VK_DOWN == e.getKeyCode()) {
                    tabla_conincidencias.requestFocus();
                    tabla_conincidencias.changeSelection(0, 0, false, false);
                }
                if (e.VK_ENTER == e.getKeyCode() && e.getSource() == tf_nro_parte) {
                    String id_text = tf_nro_parte.getText();
                    if (!id_text.isEmpty()) {
//                        if (verificarValor(id_text)) {
                        Repuesto v = RepuestoRN.findRepuestoPorCodigo(id_text);
                        if (v != null) {
                            repuesto_seleccionado = v;
                            tf_descripcion.setText(v.getDescripcion());
                            tf_codigo_barras.setText(v.getCodigo_barras());
                            bt_selecionar_repuesto.requestFocus();
                        } else {
                            JOptionPane.showMessageDialog(null, "No se encuentra repuesto");
                        }

//                        } else {
//                            tf_nro_parte.setBackground(Color.PINK);
//                            JOptionPane.showMessageDialog(null, "El código ingresado es invalido");
//                        }
                    } else {
                        tf_nro_parte.requestFocus();
                    }
                }
            }
        }
    }

    private boolean verificarValor(String text) {
        return (text.matches("[+]?\\d*(\\\\d+)?") && text.equals("") == false);
    }

    private void llenarCampos(Repuesto resul) {
        //Fields
        tf_descripcion.setText(resul.getDescripcion());
        tf_nro_parte.setText(resul.getNro_parte());
        tf_codigo_barras.setText(resul.getCodigo_barras());

    }

    private void habilitarCampos(boolean b) {
        tf_descripcion.setEditable(b);
        tf_nro_parte.setEditable(b);
        tf_codigo_barras.setEditable(b);
    }

    class JTextFieldToUpperCase extends PlainDocument {

        public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
            super.insertString(offset, str.toUpperCase(), attr);
        }
    }

}
